約 4,101,441 件
https://w.atwiki.jp/atwikimyj/pages/21.html
いろんな画像処理が可能なアプリケーション。 画像サイズの判定、リサイズ 画像形式の変更 シャープとかぼかしとかの加工 その他いろいろ。 ●TryThe Homepage perl ImageMagickの説明 http //www.tryhp.net/homeserver16.htm ●jpan tools http //jpan.jp/ja/tools/ImageMagick/.htm インストール 使えるネットサポート でじまさんのレポート http //forum.tsukaeru.net/viewtopic.php?t=1817 これによるとImage MagickというのはUNIXのアプリケーションとperlモジュールの 両方が必要なのかな?と思う。 以下使えるねっとからの転記。 ImageMagickのインストールを再度試してみました。実はソールをコンパイルすると、面倒なことなくあっさりインストールできるようです。以下にインストール手順をあげておきます。 SSHにてサーバにログインします。 適当な作業ディレクトリ(例 /usr/local/src )に移動します。 ImageMagickのソースファイルを取得します。Code wget ftp //ftp.imagemagick.org/pub/ImageMagick/ImageMag... とすると、最新版が得られるはずです。 ダウンロードしてきたファイルを解凍します。先のコマンドで取得したファイルなら、Code tar xzf ImageMagick.tar.gz で解凍できます。 解凍した ImageMagick のディレクトリに移動します。 次のコマンドを実行します。Code ./configure さらに次のコマンドを実行し、ソースをビルドしますCode make ビルドされたファイルをインストールします。Code make install 以上でImageMagickのインストールは完了です。その後、Perl モジュールのインストールを行ってみてください。Perl モジュールのインストールはCode perl -MCPAN -e shell install Image Magick で行えます。 ImageMagickインストールの追記です。先の方法だけですと、インストールしたライブラリが認識されない場合がありますので、以下の作業も行う必要があるかと思います。 SSHでサーバにログインします。 /etc/ld.so.conf ファイルにCode /usr/local/lib という行があるかを確認し、存在しない場合はこれを追加します。Code echo /usr/local/lib /etc/ld.so.conf とすると簡単です。 変更を反映させるため、以下のコマンドを実行します。Code ldconfig 以上でインストールしたImageMagickのライブラリが正しく認識されます。
https://w.atwiki.jp/honeybe/pages/19.html
perlTips配列の要素数を取る。 正規表現で置換 日付計算:月末日を算出する。 外部プログラムを実行する。 参考URL なにかあればどうぞ perl Tips 配列の要素数を取る。 print @hoge; 配列変数(@hoge)を参照すれば配列の要素数が分かる。 引数チェックなどに使用する。 if (@ARGV 2) { print "Usage hoge.pl hoge moge\n"; exit; } 正規表現で置換 $hoge =~ s/[\/ ]/-/g $hoge内の/と を-に置き換える。 s/で置換開始。 最後の/後はオプション。代表的なオプションは下記。g 繰り返し。可能な限りマッチさせ、置換する。 i 大文字小文字の区別をしない。 日付計算:月末日を算出する。 http //www.futomi.com/subroutine/getlastday.html 参照。 外部プログラムを実行する。 exec system `(backtick演算子) $result = `ls -la /tmp/` 参考URL http //www.site-cooler.com/kwl/perl/ http //www.stackasterisk.jp/tech/program/perl01_01.jsp なにかあればどうぞ 名前 コメント
https://w.atwiki.jp/atwikimyj/pages/18.html
Catalystとは perl用のフレームワークである 必要な環境 perl5.8.6以上を必要とする(ヴァージョンにによっては違うかも)。 そのためレンタルサーバで古いバージョンだと動かない。
https://w.atwiki.jp/atwikimyj/pages/39.html
本当にいまさらなのだが、パスワードはハッシュで保存しないとだめよ。 平分で通信、保存なんて絶対ダメよ。 ということで、ハッシュ化。 cpan使います。 install Digest でDigestをインストール。 perl スクリプトで use Digest SHA1; my $pwd_hash = sha1_hex($pwd); これで終わり。 http //www.slogical.co.jp/tech/perl_digestsha1.html
https://w.atwiki.jp/yuunagi/pages/18.html
シングルクォート文字リテラル シングルクォート’’でくくったもので文字列には含まれない。シングルクォート文字列を中で使いたいときは逆スラッシュを前につける。 ダブルクォート 基本的にシングルクォートと同じですが、中で変数展開が行われます。 文字列演算子 文字列と文字列の間にピリオドを使うことで、文字列を結合することができます。 比較演算子 ifの条件式で使用する。数字と文字列では異なる。数字では==を使うが文字列の場合はeqを使用するなど。文字列の大小を比較するには =、 =を使用する。文字列の大小は先頭からソートしていったものを比較する。アスキーコードでは大文字が小文字よりも小さい。 defined関数 ファイルから文字を読み込んだときに、ファイルの最後を知りたいときがある。ファイルの最後に来たときはundefが返されるので、空文字ではなくundefがきていることを確かめるためにdefined関数を使用する。 if (defined( ){ } リストと配列 リストはスカラーの集合ん順番をつけて並べたもの、配列はリストを保持する変数のこと。配列にアクセスするときは$aaa[0]のように変数の後に括弧の中に数字を入れる。先頭の番号は0。 また配列名と変数名は違った名前空間を持っているので別物として扱われる。配列に値を入れていないときはundefが入っている。 配列の最後の変数を知りたいときは、$#aaaというように$#を使う。 リストは(1,2,3)のように括弧の中に要素をコンマで区切ったもの。 (1..4)のようにコンマを2回かいて範囲を指定することもできる。(..$#aaa)のように配列の要素を中に使用することもできる。 ワードのリストを使いたいときはqwを使用する。 qw/ a b c / シングルクォートとして扱われるので改行文字¥nなどは仕様できない。 //はデリミタと呼ばれ、スラッシュ以外にも任意の記号を使うことができる。 配列全体を表すには@を配列名の前につける@aaa。 popを使用すると配列から最後の要素を取り出して返す。使い方は $bb = pop @aaa; 逆にpushを使用すると配列の末尾に追加する。 foreach 配列やリスト全体に処理をしたいときに使用する。 レキシカル変数 Perlはデフォルトではすべての変数はグローバル変数。my演算子をつけることでプライベート変数とすることができる。 可変長のパラメータ Perlは引数が固定されておらず、可変長の変数を渡すことができる。サブルーチンの中で引数の個数があっているかをチェックするには@_配列を調べればよい。
https://w.atwiki.jp/atwikimyj/pages/30.html
memcachedのインストールまとめ memcachedはapacheなどと同じようにLINUXのアプリケーション。 rpmファイルをとってくる。 memcachedはlibeventも必要らしい。 参考 http //tech.feedforce.jp/memcached.html rpm置き場は以下。 libevent http //dag.wieers.com/rpm/packages/libevent/ memcached http //dag.wieers.com/rpm/packages/memcached/ CentOS4 = RHEL4 なので、それのi686版をダウンロード。 # rpm -i --replacefiles --percent hogehoge.rpm でlibevent、memcachedの順にインストール。 memcached関連のモジュールをインストール memcachedをAPI経由でperlから扱えるようにするためのモジュールが Cache Memcached(すんなり入った) Cache Memcached Managed これ苦戦。普通にインストールするとmake testで失敗するので強制インストール。 cpan force install Cache Memcached Managed Catalyst関連のモジュールを入れる。 cpan install Catalyst Plugin Session Store Memcached
https://w.atwiki.jp/thvision/pages/1096.html
ここではルールリファレンス(ルールブックver2.2,P34~45)について詳しい説明と補足を追加したものです。ルールブックを見ながらお読みください。 1.基本ルール、ゲーム進行に関する補足 テキストの優先順位 名称のルール 2.カードのプレイに関する補足 キャラクター スペルカード コマンドカード 【装備】 【装備/場】 【呪符】 【世界呪符】 【幻想生物】 3.対象に関する補足 4.効果に関する補足 既に発生している効果 複数の効果が矛盾した場合 同時に発生する効果 効果の重複 表向きにする効果 裏向きにする効果 手札に対する効果 戦闘力への修正の優先順位 5.戦闘に関する補足 →戦闘処理詳細をご覧ください 6.決死状態と破棄に関する補足 7.干渉に関する補足 干渉中に発生した効果の割り込み 干渉中に決死状態・破棄する効果が解決した場合の解決方法 8.自動効果に関する補足 自動効果と区分自動α 自動β 自動γ 9.起動効果に関する補足 10.その他の事項の補足 裏向きのカードに関する説明 無限ループが発生したときの説明
https://w.atwiki.jp/seesaa/pages/15.html
WebアプリケーションのStruts1.x + aspectJ + iBatisでの実装例です。 SAStrutsの機能リファレンスを参考に書いています。 プロジェクト構成 プロジェクト構成は、SAStrutsのように、下記構成でもよいですが、 (SAStruts構成でよければ、SAStrutsを採用すると高度なURLルーティング等が使用できたかと思います) ・ルートパッケージ.action ・ルートパッケージ.form ・ルートパッケージ.entity ・ルートパッケージ.service ユースケース単位で作成してもよいです。 ・ルートパッケージ.共通.entity(テーブルと1対1のentity) ・ルートパッケージ.共通.dbservice(マスタテーブルのトランザクションサービス) ・ルートパッケージ.共通.dao(マスタテーブルのdao) ・ルートパッケージ.ユースケース1.action ・ルートパッケージ.ユースケース1.dbservice ・ルートパッケージ.ユースケース1.dao ・ルートパッケージ.ユースケース2.action ・ルートパッケージ.ユースケース2.dbservice ・ルートパッケージ.ユースケース2.dao この構成だと、「ルートパッケージ.共通.jar」と「ルートパッケージ.ユースケース1.jar]があればWebアプリは動作します。 機能変更の影響範囲と、ビルド単位をあわせることができます(共通.jarの影響範囲は全ユースケースですが・・・) 特別なフレームワークの使用は無いため、プロジェクト構成に制約はありません。 アーキテクチャ Strutsなので、MVC(Model View Controller)のアーキテクチャに基づいていて、 Modelはエンティティ、 ViewはJSP、Controllerはアクションになります。 トランザクション トランザクションは、xxxxxDbServiceクラスのpublicメソッドの開始と終了時に開始、コミット、ロールバックされます。 マニュアルトランザクションをAspectJで差込ます。 /** トランザクション開始ポイントカット */ pointcut atUpdateable() execution(public * *..*DbService.*(..) throws Exception) !within(DaoAspect); /** トランザクションを開始するアドバイス */ before() throws Exception atUpdateable() { // サービスのdaoゲッターを呼び、SqlMapClientを取得する SqlMapClientWrapper sqlMap = getTargetSqlMapClient(joinPoint); // トランザクションを開始する SqlMapClientManager.start(sqlMap, joinPoint); } /** 正常系でトランザクションを終了するアドバイス */ after() returning throws Exception atUpdateable() { // サービスのdaoゲッターを呼び、SqlMapClientを取得する SqlMapClientWrapper sqlMap = getTargetSqlMapClient(joinPoint); // コミット SqlMapClientManager.commit(sqlMap, joinPoint); // トランザクションを終了する SqlMapClientManager.end(sqlMap, joinPoint); } /** 読み書き可能且つ異常系でトランザクションを終了するアドバイス */ after() throwing(Exception e) throws Exception atUpdateable() { // サービスのdaoゲッターを呼び、SqlMapClientを取得する SqlMapClientWrapper sqlMap = getTargetSqlMapClient(joinPoint); // ロールバックログを出力するためにtrueを設定 sqlMap.setRollback(true); // トランザクションを終了する SqlMapClientManager.end(sqlMap, joinPoint); throw e; } xxxxxDbServiceクラスのpublicメソッド呼び出しの際、すでにトランザクションが開始されている場合、 そのトランザクションは引き継がれます(同じトランザクション内でSQLが発行されます。) SAStrutsのデフォルト設定と同様に、トランザクション属性はRequiredとなります。 ただし、このAOPでは、トランザクション属性はRequires_newは設定できません。 Requires_newが必要な場合は、別トランザクションで伝票番号採番等を処を行い、その結果を引数に、トランザクションを開始します。 ログ出力等も同じく、別トランザクションで出力します。 public ActionForward execute() throws Exception { // 開始ログ出力(ログは別トランザクション) logDbService.writeLog(); // 伝票番号採番(採番後そのトランザクションはコミットする。) long denpyoNo = denpyoDbService.createDenpyoNo(); // 新規伝票作成(伝票作成、在庫引き当て、出荷手配を行う。) denpyoDbService.regist(denpyoNo, date); // 終了ログ出力(ログは別トランザクション) logDbService.writeLog(); return mapping.findForward("success"); } ロストアップデートを防ぐ 同じRDBMSを共有するので、ロストアップデートが発生します。ロストアップデートは楽観ロックで行います。 各テーブルは更新日時(TimeStamp)を持ち、その値が更新されていないことを確認し、ロストアップデートを防ぎます。 すでに更新日時が更新されている場合、ロストアップデートとしてエラーとします。 以下の楽観ロックをサポートするAspectJを提供します。 /** Dao楽観ロック更新、削除実行時のポイントカット */ pointcut atDaoOptimisticLockExecute() execution(public * *..*DaoImpl.*WithOptimisticLock(..)) !within(DaoAspect); after() returning(Object o) throws Exception atDaoOptimisticLockExecute() { int updRecode = ((Integer)o).intValue(); if (updRecode == 0) { // 更新件数が0件の場合 throw new AplBusinessException("申し訳ありません。ご指定のデータは他の利用者がすでに更新しています。 データ整合性を保つために、検索からやり直してください。"); } } サイクルデットロックを防ぐ サイクルデットロックを防ぐには、ロックを取得するテーブルとレコードの順序をすべての機能で同じにすることです。 更新するbean(関連するbeanを含む)に対し、クラス名の昇順、主キーの昇順でSELECT~WITH UPDLOCKすればよいでしょうか。 このロジックは、IBatorでentityを生成した場合は可能かなと思っています(現在未実装) サービス サービスとは、トランザクションの制御クラスとしましす。 xxxxxDbServiceクラスは、DBトランザクションを制御します。 xxxxxServiceクラスは、その他BMPを制御します。 xxxxxDbServiceクラスは、コンストラクタ呼び出し時に、使用するDaoをインジェクションします。 フィールドインジェクションではないですが(サクセサは必要)、以下のメンバ定義でインジェクションされます。 /** 特定健康診断データDAOインスタンス */ @DaoInjection private HealthDiagnosDao healthDiagnosDataDao = null; または、別途ファイルに定義することも可能です。 ファイル定義と@DaoInjectionでは、ファイル定義が優先されます。 単体テスト時などは、ファイル定義でスタブDaoをインジェクションさせることができます。 ※ ビジネスロジックはどこに実装する。 ビジネスロジックの実装はPofEAAではentityとなっています。のでentityに実装します。 ところでビジネスロジックとはなんでしょうか?SAStrutsにまとめられていますので、それを踏まえ下記2つと定義します。 ビジネスロジック 導出プロパティ(メソッド) 判定メソッド 導出プロパティは単価計算等。判定プロパティは、区分値を参照した判定ロジック等。 この2つをentityに実装します。この実装方針により、ビジネスロジックは完全に共通化されます(entityは1つなので) また、entityは関連するリレーショナルデータをすべてもっているので、ビジネスロジックメソッドの引数は簡単なものになります。 さて、上記ビジネスロジックだけではイベント処理は成立しません。これらを呼び出しならが、データの操作が必要です。 このデータ操作処理はxxxxxDbServiceクラスに実装します。xxxxxDbServiceクラスはイベントに依存する可能性があるので、 処理の共通化が難しいかもしれません。共通化が難しいところは、実装が簡単な方法としましょう。 上記のような実装をすれば、次のテスト方法でC2に近い網羅率となり、品質が確保されると思います。 entityに実装したビジネスロジック →unitテストでC2を確保します。 xxxxxDbServiceクラス →結合テストでC1を確保します。 xxxxxDbServiceクラスがC1で良い実装であれば、多少共通化されていなくても、テスト工数が爆発することはありません。 例外のハンドリング 例外はStrutsの機能でキャッチします。 global-exceptions !-- 回復可能例外 -- exception key="" path="" handler="exp.common.web.exception.AplExceptionHandler" type="exp.common.exception.AbsRecoveryException" /exception !-- システム例外 -- exception key="" path="/jsp/common/error.jsp" handler="exp.common.web.exception.AplExceptionHandler" type="java.lang.Exception" /exception /global-exceptions 回復可能例外は、エラーを設定し遷移元画面に遷移します(戻ります) // 例外ハンドリングを行う if (ex instanceof AbsRecoveryException) { errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage(ex.getMessage(), false)); forward = mapping.getInputForward();// 戻り先はinput属性の指定先 } ※複数行エラーに対応すると、便利かと思います。 システムエラーは、ログ出力を行いシステムエラー画面に遷移します。 その際のログ内容は自由に設定できます。エラー発生時のForm、Session、パラメータ等。 アクション 通常のStruts1.xのアクションクラスです。 ただ、やはりアクションの開始、終了には共通的な処理を差し込みたいものです。 ログイン済みかチェックする。 セッション情報を、Thread Local Storageに格納し、同Thread内のどこからでも参照可能にする。 log4j NDCにユーザー識別子を設定する。 ログの出力。 アクションの開始、終了は、AspectJで処理を差込ます。 /** ececuteポイントカット */ pointcut atExecute() execution(public ActionForward *..*Action.execute(..) throws Exception) !within(*..test.action.*) // テスト用Actionクラス !within(ActionAspect); /** ececuteを実行するbeforeアドバイス */ before() throws Exception atExecute() { HttpServletRequest request = (HttpServletRequest)((thisJoinPoint.getArgs())[2]); HttpSession session = request.getSession(); String userId = AssertionUtil.getUserId(session); // アサーションが妥当かチェックする。 CheackAssertion.check(session); // プロセス毎のコンテキストを設定する。 ContextUtil.setUserId(userId); // ユーザーID // log4j診断コンテキストの設定 NDC.push(userId); // 操作情報ログを出力する。 ActionMapping mapping = (ActionMapping)((thisJoinPoint.getArgs())[0]); ActionForm actionform = (ActionForm)((thisJoinPoint.getArgs())[1]); ActionLogger.write(userId, mapping, actionform); } /** ececuteを実行するafterアドバイス */ after() throws Exception atExecute() { // log4j診断コンテキストの削除 NDC.remove(); } Struts2.xのだと簡単に実装できるかと思いますが、 Struts1.x + AspectJでも十分対応できるのではと思います。 データ変換 entity(Model)とform(View)のデータは異なります。 formのデータはすべてString型で、entityはLongだったり、Dateだったり。 formの日付は、西暦だったり、和暦だったり。数値の表示は3桁,区切りだったり。 entityはIDを管理しますが、formは名称のケースがほとんどです。 entityとformのデータ変換を行わないといけません。 このデータ変換は、各form単位に作成しなくてはなりません。 ただし、このデータ変換の際にDBアクセスが発生してはいけません。すでにトランザクションは終了しています。 (トランザクション範囲を広くすればよいという問題ではないと思います。トランザクションは設計されたものです。) iBatisを使用すれば、entityは関連するデータをすべて取得する(O/Rマッピング)ので、 formへ設定する情報はすべてそろっていると思います。IDに関連する名称等。 後は、Stringへの変換を1とつ1とつ実装するとよいと思います(変換ロジックは、簡単に変換Util化できると思います) 各formには、toFrom(entity), toEntiry()メソッドがあれば、ソースの可読性は確保されるかと思います。 ※リストボックスの値は? entityは関連があるのではれば、リレーショナルをたどって取得可能かと思います。 関連性がないなら別entityで取得し、toFrom(entity, entity,・・・)のような実装が可能かと思います。 entityは一つでなくてもよいですよね。 JSP 相変わらずHTMLとロジックの分離はできませんがJSPを使用します。HTMLモック作成はデザイナーが、JSPへの変換はプログラマが行います。 JSPへの変換後、複雑なjavascriptを記載します。javascriptをどれだけ書けるかが、高機能なWebページ作成の肝だと思います。 高機能なWebページ作成するには、プログラマーがページ全体を設計しなければいけません・・ taglibは「JSTL」を使います。JSTLであればJSPへの変換は簡単です。 あと、テーブル表示にはstruts-layoutを使用します。 layout row でページング、ソートが簡単に実装できます。ページングするデータはセッションに保存されます。 layout rowはJSTLと相性がよく下記のような実装が可能です。 例)実装例 1ページ25行、ドキュメントID列はソート可能、hrefを含む、 name="document[ c out value="${index}" / ]のhidden項目については、Struts側でBeanのListとして復元される(インラインエディットが可能) layout row styleClass="downloadListTable" layout pager maxPageItems="25" layout collection name="documentList" id="document" indexId="index" styleClass="dataGrid" styleClass2="dataGrid2" layout collectionItem title="ドキュメントID" style="width 110px;text-align center;" sortable="true" c if test="${document.deleteFlg}" c out value="${document.did}"/ /c if c if test="${!document.deleteFlg}" a href="javascript doDownload( c out value="${invalue="${index}" / ;" class="link" c out value="${document.did}"/ /a /c if input type="hidden" name="document[ c out value="${index}" / ].docuocument.documentId}" / " / input type="hidden" name="document[ c out value="${index}" / ].updTment.updTime}" / " / input type="hidden" name="document[ c out value="${index}" / ].datet.date}" / " / input type="hidden" name="document[ c out value="${index}" / ].hosp{document.hospitalName}" / " / input type="hidden" name="document[ c out value="${index}" / ].did".did}" / " / input type="hidden" name="document[ c out value="${index}" / ].down{document.downloadDate}" / " / input type="hidden" name="document[ c out value="${index}" / ].delecument.deleteFlg}" / " / input type="hidden" name="document[ c out value="${index}" / ].expiocument.expiryDate}" / " / input type="hidden" name="document[ c out value="${index}" / ].etc".etc}" / " / /layout collectionItem layout collectionItem style="width 110px;text-align center;" title="検診日" property="date"/ layout collectionItem style="width 300px;text-align center;" title="病院" property="hospitalName"/ layout collectionItem style="width 110px;text-align center;" title="ダウンロード期限" property="expiryDate"/ layout collectionItem style="width 210px;text-align center;" title="" property="etc"/ /layout collection /layout pager /layout row ページング、ソートを独自実装するには、下記SortActionを拡張すればよいかと思います。 action path="/sort" type="fr.improve.struts.taglib.layout.sort.SortAction" scope="request" validate="false" /action iBatis パーシステンス層にはiBatisを使用します。 lazy loadを使用したORマッピングも可能なようですが、select joinでも実装可能です。 lazy loadはトランザクション外でselectが発生する可能性があるのでselect joinで実装します。Lazy Loading vs. Joinsも参考ください。 下記はユーザーIDに関連するグループ情報を取得する定義です。 !-- ユーザマスタ -- resultMap id="userResult" class="User" groupBy = "userId" // ① userIdでDISTINCT result column="user_id" jdbcType="BIGINT" property="userId" / result column="user_kind" jdbcType="CHAR" property="userKind" / result column="user_login_id" jdbcType="VARCHAR" property="userLoginId" / result column="user_sex_code" jdbcType="CHAR" property="userSexCode" / result column="user_birthday" jdbcType="DATE" property="userBirthday" / result column="user_delete_flg" jdbcType="BIT" property="userDeleteFlg" / result property="userGroupList" resultMap="user.userGroupResult"/ // ② 1対nマッピング result property="openRuleList" resultMap="user.openRuleResult"/ // ③ 1対nマッピング /resultMap !-- ユーザグループ -- resultMap id="userGroupResult" class="UserGroup" groupBy = "userGroupId" // ④ userGroupIdでDISTINCT result column="user_group_id" property="userGroupId" jdbcType="BIGINT" / result column="user_id" property="userId" jdbcType="BIGINT" / result column="group_id" property="groupId" jdbcType="BIGINT" / result property="userGroupAttributeList" resultMap="user.userGroupAttributeResult"/ // ⑤ 1対nマッピング result property="group" resultMap="user.groupResult"/ // ⑥ n対1マッピング /resultMap !-- ユーザグループ属性 -- resultMap id="userGroupAttributeResult" class="UserGroupAttribute" result column="user_group_attribute_id" property="userGroupAttributeId" jdbcType="BIGINT" / result column="user_group_id" property="userGroupId" jdbcType="BIGINT" / result column="user_group_attribute_attribute" property="userGroupAttributeAttribute" jdbcType="VARCHAR" / /resultMap !-- グループマスタ -- resultMap id="groupResult" class="Group" result column="group_id" property="groupId" jdbcType="BIGINT" / result column="group_name" property="groupName" jdbcType="VARCHAR" / result column="group_nickname" property="groupNickname" jdbcType="VARCHAR" / /resultMap !-- ユーザデータを取得するSQL -- select id="select_by_condition" parameterClass="UserCondition" resultMap="userResult" SELECT * FROM m_user usr // ⑦ 取得するテーブルをすべてjoinする LEFT JOIN m_user_group userGroup on usr.user_id = userGroup.user_id LEFT JOIN m_user_group_attribute attribute on userGroup.user_group_id = attribute.user_group_id LEFT JOIN m_group grp on userGroup.group_id = grp.group_id WHERE usr.delete_flg = false isNotEmpty property="userId" prepend="AND" // ⑧ 可変条件 usr.user_id = #userId# /isNotEmpty isNotEmpty property="groupId" prepend="AND" // ⑨ 可変条件 grp.group_id = #groupId# /isNotEmpty ORDER BY $oderBy$ // ⑩ ソート条件 /select userResultを記載するのは大変です。ので、IBatorでテーブルより自動生成します。 ②③⑤⑥の定義は自動生成してくれません(できるかもしれません?)ので、手動で追加します。 自動生成の際にentityも生成してくれます。②③⑤⑥に対応するアクセサは自動生成してくれませんので、手動で追加します。 自動生成クラスを継承する形でentityクラスを作成し、その中で②③⑤⑥を実装すればよいかと思います。 自動生成クラスを継承したentityクラスには、ビジネスロジックも実装します。 entityの自動生成 iBatisの定義を作成するためIBatorを使用します。 次のファイルが自動生成されます。 ・SqlMap →"resultMap","insert文","update文"が利用可能です。 ・entity →entityとして利用可能です。 ・dao →利用しません。 バリデータ Strutsのvalidation.xmlを利用するのは生産性が悪いと思います。validation.xmlの一番のうりであるjavascript検証コードの自動生成も すべてのバリデータに対して行われるわけではありません(一番使用したいvalidwhenが自動生成されないのが残念です) javascript検証コードは別途作成すると割り切って、ValidatorForm#validateをオーバーライドするほうがよいと思います。 ファイルアップロード Strutsはマルチパートに対応しているので、特別な実装はありません。 formにbyte[]のアクセサを用意すれば、アップロードされたファイルが取得できます。 Ajax Ajaxも通常のhttp通信のため、特別な実装はありません。 画面遷移はしませんので、ActionForward=nullを返します。 値を返す場合は、PrintWriterで値を返します。 (PrintWriterはちょっと特別な実装なので、ライブラリ化したほうがいいでしょう。) ログ出力 ログの出力は、AspectJを利用すれば、actionの開始、終了時、Daoの開始、終了等に設定できます。また、それらの入力情報も出力できるかと思います。 しかし、入力情報も出力はセキュリティ上問題です。ログファイルに機微なデータが記録されてしまいます。「ログファイルは参照禁止」となると本末転倒ですね。 例えば、「いつ、だれが、何データ」を参照したかをロギングするこは、ログの監査として有効かもしれません。 Daoの親クラスを作成し、selectを発行する(queryForList)ラッパーメソッドを作成し、 「ユーザ識別子」、「発行するselect文のID」(SQLをログに出力することもNGだと思います)、「検索条件」をログ出力すればよいと思います。 「ユーザ識別子」はlog4jのNDCを使用します。 「検索条件」に機微なデータが指定されたら? ラッパーメソッドの機能に「検索条件」を出力制御フラグを用意すればよいでしょう。 もう面倒なので、ログ出力を暗号化しては? ログのリアルタイム監視ができなくなります・・・ ログの設計は重要ですね。
https://w.atwiki.jp/saicron/pages/54.html
Webデザイン JavaScript jQuery.old jQuery is a new kind of JavaScript Library.jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. jQuery is designed to change the way that you write JavaScript. jQuery +jQueryとは… jQueryとは Contents jQuery.oldContents リファレンス Official jQueryを始めるjQueryを書く場所、書き方jQueryをダウンロードする HTMLファイルでjQueryを使えるようにする。 インターネット上のjQueryファイルを使うGoogle AJAX Libraries API ツール jQuery関数 .ready() Eventマウスカーソルが要素の上に乗ったとき Tutorial tmp ダイアログ 関連ページ jQuery 基本 jQuery UI Easing 可変グリッド プラグイン集 Resource リファレンス +リファレンス… リファレンス Documentation - jQuery jQuery日本語リファレンス jQuery API 1.4.2 日本語リファレンス PHP JavaScript Room page top Official jQueryDocumentation jQueryを始める jQueryを書く場所、書き方 +ダウンロードしたローカルのjQueryファイルを使う… ダウンロードしたローカルのjQueryファイルを使う jQueryをダウンロードする Downloading jQuery - jQueryCurrent Release(最新版)、Minified(jQueryを使うとき)、Uncompressed(jQueryファイル自体を読むとき)。 HTMLファイルでjQueryを使えるようにする。 html head script type="text/javascript" src="path/to/jquery.js" /script script type="text/javascript" // ここに処理を記述します。 /script /head body a href="http //jquery.com/" jQuery /a /body /html jQueryを使い始めるには - jQuery日本語リファレンス +インターネット上のjQueryファイルを使う… インターネット上のjQueryファイルを使う Google AJAX Libraries API +直接 src=…でリンクする… region(直接 src=…でリンクする html head script src="http //ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" /script script $(function(){ $("#test").html("Hello World!") }); /script /head body div id="test" /div /body /html jQueryの簡単な書き方 - All About head 内の script src=… がjQueryファイルへのリンク。 head 内の script … /script にjQuery(JavaScript)のプログラムコードを書く。 ツール ScriptSrc.net (GoogleにホスティングされているjQueryなどのタグをクリップボードにコピーする) script src=… の箇所。これをファイルに貼り付けるだけでいい。 +JavaScriptでロードする… JavaScriptでロードする html head script type="text/javascript" src="http //www.google.com/jsapi" /script script type="text/javascript" google.load( jquery , 1 ) /script /head … GoogleでホストされているjQueryを使う方法 - IDEA*IDEA google.load( jquery , 1 )の 1 はjQueryのバージョン1シリーズの最新版を指定していることになる(Google AJAX Libraries API) page top jQuery関数 jQuery Core:$(...) jQuery関数 - php javascript room page top .ready() .ready( handler ) - jQuery http //hkom.blog1.fc2.com/blog-entry-614.html - anything from here jQueryのreadyメソッドはonloadイベントより前に呼ばれる - House Tect ready() - Ajax入門|Ajaxの基礎と応用の学習 今さら聞けないjQuery実行パターンまとめ - 5509 Re 今さら聞けないjQuery実行パターンまとめ【実行のタイミングって?ちょっとした補足】 - THE HAM MEDIA page top Event マウスカーソルが要素の上に乗ったとき hover(over, out) - StackTrace hover(over, out) - jQuery日本語リファレンス page top Tutorial +jQuery Tutorial… jQuery Tutorial page top tmp jQuery source viewer 25 jQuery Animation Effects Examples jQueryを良くする25のTIPS (function($) {})(jQuery);って何?って思ったからいろいろ試してみた記録 jQuery 開発者向けメモ プラグインを使わずjQueryに23の機能をつける方法 jQuery 1.4 API Cheat Sheet jQueryで画面の中央に要素を表示する方法 jQuery 1.2 Cheat Sheet jQuery 1.2 Cheat Sheet 無名関数とjQuery jQueryの無名関数の組み立て方 無名関数をすぐに実行する(function(){})()の覚え書き [JavaScript] http //blog.livedoor.jp/eeu/archives/55310188.html $(function(){}とjQuery(function($){}の違い&無名関数必要性の有無 jQueryのプラグインの作り方 jQueryの読み込み待ちとか関数の処理待ちとか遅延処理っぽいこと page top ダイアログ 海外で流行中のダイアログ表示をjQuery UIで page top 関連ページ JavaScript page top jQuery The jQuery Project (Official)jQuery API jQuery UI jQuery日本語リファレンス jQuery2.4の新機能(イベント・アニメーション編) (idocsq.net) 今さら聞けないjQuery実行パターンまとめ page top 基本 animate(params, options) (jQuery日本語リファレンス) Full Cycle of Animation on Hover/Off (CSS TRICKS)アニメーションのキューをコントロールする。hoverで色々したい場合などはstop(true,true)が 便利。 jQuery基礎文法最速マスター (to-R) jQuery 開発者向けメモ - 基本・サンプル (mikage s page) page top jQuery UI +jQuery UIとは… jQuery UI provides abstractions for low-level interaction and animation, advanced effects and high-level, themeable widgets, built on top of the jQuery JavaScript Library, that you can use to build highly interactive web applications. jQuery UI jQuery UIは、JavaScript(Ajax)フレームワークjQueryのプロジェクトがjQuery用に開発している、以下の機能を提供するプラグインです。 ドラッグ&ドロップなどのマウス操作の機能拡張 ユーザーインターフェイスを改善するウィジェット(アコーディオン、日付入力、ダイアログ、スライダー、タブなど) jQueryのプラグイン「jQuery UI」とは? (@IT) jQuery UI API 1.8.1 日本語リファレンス (StackTrace) page top Easing +easingとは… easingとは easingとは、エフェクトの動きを加速/ 減速させるための関数です。 例えばフェードアウトの動きを考えたとき、通常は透明度の変化量は経過時間に対して線形です。全体で1秒かかって消える処理であれば、0.5秒経過時の透明度は0.5になります。 しかし、ここでeaseInQuadの動きを適用すると、変化量は線形ではなく2次関数の曲線になります。(下記サンプル参照) そのため、最初はゆっくりと薄くなっていき、後半に急激に消えていくような効果が得られます。 Easing/jQuery (jQuery日本語リファレンス) jQuery Easing Plugin (version 1.3) (GSGD) +GSGD JQuery Easing Plugin… このeasingプラグインでは、 version 1.3時点で32パターンが提供されています。 これ以外にもeasingは比較的容易に自作することが出来、animateなどと組み合わせることで豊かな表現が可能になります。 Easing/jQuery (jQuery日本語リファレンス) page top 可変グリッド ウィンドウサイズを変えるとコンテンツが再配置される可変グリッドレイアウトです。 可変グリッド(リキッド)レイアウト (Prismtone) 可変グリッドレイアウトのjQueryプラグイン書いたよ page top +チュートリアル… チュートリアル はじめてのjQuery (スライド) jQuery for Designers +個別… 個別 jquery.toggleElements.js Toggle HTML-Elements with jQuery jQueryでできたメニューからひょっこり顔を出すアイコンの仕組み EasyDrag jQuery Plugin page top プラグイン集 jQueryのプラグイン33+1選 -2010年3・4月 (Coliss) アニメーション、エフェクト (PHP JavaScript Room) jQueryのアニメーション関連いろいろまとめ (5509) [JS]背景画像をアニメーションさせるjQueryのプラグイン -jAni http //coliss.com/articles/build-websites/operation/javascript/jquery-plugin-jani.html (coliss) pathにそってアニメーションできるjQueryプラグイン「jQuery.path」 (Web活メモ帳) 背景をアニメーションさせるんだもん Flashのようなアニメーションの動きをする jQuery プラグイン (CSS Lecture) page top Resource Ajax - php javascript room page top
https://w.atwiki.jp/terragen/pages/142.html
ここは、Terragen 4で利用可能なアニメーションモジュールのリファレンスです。アニメーションは、アニメーション機能のライセンスを購入された方にのみ有効となります。 ここでは、TG4でのアニメーションの概要と、モジュールで使用されるウィンドウとビューの参照を紹介します。 アニメーションの概要 パラメータのアニメーション化、アニメーションのプレビュー、アニメーションシーケンスのレンダリングなど、TG4のアニメーションシステムの概要を詳しく説明します。 アニメーションパネル アニメーションパネルについて説明します。メインウィンドウ、または新規ウインドウを開いて表示する事が出来ます。ドープシートとカーブエディタについての記述が含まれます。 メインウインドウのタイムライン メインアプリケーションウィンドウの下部にあるタイムラインを説明します。 .chan / .movファイルからのアニメーションデータのインポート TG4が、".chan"と".mov"ファイルからどのようにアニメーションデータをインポート出来るかを説明します。